package bcMedEntity;

import java.sql.ResultSet;
import java.sql.SQLException;

import bcMedBeans.Consulta;
import bcMedBeans.Endereco;
import bcMedBeans.Medico;
import bcMedBeans.Paciente;
import bcMedBeans.PlanoSaude;
import bcMedBeans.StatusConsulta;
import bcMedBeans.TipoConsulta;
import bcMedEntityInterface.IEntityDataBaseRead;

/**
 * Gerencia Operacoes de Leitura do Banco de Dados
 *
 */
public class EntityDataBaseRead implements IEntityDataBaseRead{
	
	EntityDataBase entityDataBase;
	

	public EntityDataBaseRead(EntityDataBase entityDataBase){
		this.entityDataBase = entityDataBase;
		return;
	}
	


	/**
	 * Retorna Objeto Consulta a partir de um id do Banco de Dados
	 * Retorna Null em caso de falha
	 *
	 */
	@Override
	public Consulta readConsulta(int idConsulta) {
		
		Consulta result = new Consulta();
		String sql = "SELECT * FROM consulta WHERE idconsulta = " +idConsulta+" ";	// acho que tem q circundar idconsulta com ' '
		try {
			ResultSet data = entityDataBase.executeQuery(sql);
			data.next();
			result.setData(data.getDate("data"));
			result.setIdConsulta(data.getInt("idconsulta"));
			result.setMedico(readMedico(data.getInt("medico_idmedico")));
			result.setPaciente(readPaciente(data.getInt("paciente_idpaciente")));
			result.setStatusConsulta(readStatusConsulta(data.getInt("status_consulta_idstatus_consulta")));
			result.setTipoConsulta(readTipoConsulta(data.getInt("tipo_consulta_idtipo_consulta")));
			

		} catch (SQLException e) {
			System.out.println("Exception at EntityDataBaseRead::readEndereco : " + e.getMessage());
			return null;
		}
		return result;

	}

	
	/**
	 * Retorna Objeto Endereco a partir de um id do Banco de Dados
	 * Retorna Null em caso de falha
	 *
	 */
	@Override
	public Endereco readEndereco(int idEndereco){
		Endereco result = new Endereco();
		String sql = "SELECT * FROM endereco WHERE idendereco = " +idEndereco+" ";
		try {
			ResultSet data = entityDataBase.executeQuery(sql);
			data.next();
			result.setBairro(data.getString("bairro"));
			result.setCep(data.getString("cep"));
			result.setCidade(data.getString("cidade"));
			result.setEstado(data.getString("estado"));
			result.setIdEndereco(data.getInt("idendereco"));
			result.setNumero(data.getInt("numero"));
			result.setRua(data.getString("rua"));
		} catch (SQLException e) {
			System.out.println("Exception at EntityDataBaseRead::readEndereco : " + e.getMessage());
			return null;
		}
		return result;
	}


	/**
	 * Retorna Objeto Medico a partir de um id do Banco de Dados
	 * Retorna Null em caso de falha
	 *
	 */
	@Override
	public Medico readMedico(int idMedico) {
		Medico result = new Medico();
		String sql = "SELECT * FROM medico WHERE idmedico = " +idMedico+" ";
		EntityDataBaseSearch tempDBSearch = new EntityDataBaseSearch(this.entityDataBase);
		try {
			ResultSet data = entityDataBase.executeQuery(sql);
			data.next();			
			result.setIdMedico(data.getInt("idmedico")); //ou so idMedico?
			result.setNome(data.getString("nome"));
		} catch (SQLException e) {
			System.out.println("Exception at EntityDataBaseRead::readEndereco : " + e.getMessage());
			return null;
		}
		return result;
	}


	/**
	 * Retorna Objeto Paciente a partir de um id do Banco de Dados
	 * Retorna Null em caso de falha
	 *
	 */
	@Override
	public Paciente readPaciente(int idPaciente) {
		Paciente result = new Paciente();
		String sql = "SELECT * FROM paciente WHERE idpaciente = " +idPaciente+" ";
		EntityDataBaseSearch tempDBSearch = new EntityDataBaseSearch(this.entityDataBase);
		try {
			ResultSet data = entityDataBase.executeQuery(sql);
			data.next();
			result.setCadastro(data.getDate("cadastro"));
			result.setEndereco(readEndereco(data.getInt("endereco_idendereco")));
			result.setIdade(data.getInt("idade"));
			result.setIdPaciente(data.getInt("idPaciente"));
			result.setNome(data.getString("nome"));
			result.setPlanoSaude(readPlanoSaude(data.getInt("plano_saude_idplano_saude")));
			result.setSexo(data.getString("sexo").charAt(0));
		} catch (SQLException e) {
			System.out.println("Exception at EntityDataBaseRead::readEndereco : " + e.getMessage());
			return null;
		}
		return result;
	}
	
	
	/**
	 * Retorna Objeto PlanoSaude a partir de um id do Banco de Dados
	 * Retorna Null em caso de falha
	 *
	 */
	@Override
	public PlanoSaude readPlanoSaude(int idPlanoSaude){
		PlanoSaude result = new PlanoSaude();
		String sql = "select * from plano_saude WHERE idplano_saude = "+idPlanoSaude+" ";
		try {
			ResultSet data = entityDataBase.executeQuery(sql);
			data.next();
			result.setIdPlanoSaude(data.getInt("idplano_saude"));
			result.setNome(data.getString("nome"));
		} catch (SQLException e) {
			System.out.println("Exception at EntityDataBaseRead::readPlanoSaude : " + e.getMessage());
			return null;
		}
		return result;
	}


	/**
	 * Retorna Objeto StatusConsulta a partir de um id do Banco de Dados
	 * Retorna Null em caso de falha
	 *
	 */
	@Override
	public StatusConsulta readStatusConsulta(int idStatusConsulta) {
		StatusConsulta result = new StatusConsulta();
		String sql = "select * from status_consulta WHERE idstatus_consulta = "+idStatusConsulta+" ";
		try {
			ResultSet data = entityDataBase.executeQuery(sql);
			data.next();
			result.setIdStatusConsulta(data.getInt("idstatus_consulta"));
			result.setNome(data.getString("nome"));
		} catch (SQLException e) {
			System.out.println("Exception at EntityDataBaseRead::readStatusConsulta : " + e.getMessage());
			return null;
		}
		return result;
	}


	/**
	 * Retorna Objeto TipoConsulta a partir de um id do Banco de Dados
	 * Retorna Null em caso de falha
	 *
	 */
	@Override
	public TipoConsulta readTipoConsulta(int idTipoConsulta) {
		TipoConsulta result = new TipoConsulta();
		String sql = "select * from tipo_consulta WHERE idtipo_consulta = "+idTipoConsulta+" ";
		try {
			ResultSet data = entityDataBase.executeQuery(sql);
			data.next();
			result.setIdTipoConsulta(data.getInt("idtipo_consulta"));
			result.setNome(data.getString("nome"));
		} catch (SQLException e) {
			System.out.println("Exception at EntityDataBaseRead::idTipoConsulta : " + e.getMessage());
			return null;
		}
		return result;
	}
	
	
}
